extends Area2D

signal hit
#使用 export 关键字，这样我们就可以在“检查器”中设置其值。对于希望能够像节点的内置属性一样进行调整的值，这可能很方便。

@export var speed = 400
var screen_size # Size of the game window.

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	screen_size=get_viewport_rect().size
	hide()
#	游戏游戏窗口大小赋值

#_process每一帧都会被调用，我们用它进行下面的事情
#检查输入。
#沿给定方向移动。
#播放合适的动画。
func _process(delta: float) -> void:
	var velocity=Vector2.ZERO
#	注意调用的Input的方法是什么，调用不同方法移动方式不同
	if Input.is_action_pressed("ui_right"):
		velocity.x+=1
	if Input.is_action_pressed("ui_left"):
		velocity.x-=1
	if Input.is_action_pressed("ui_up"):
		velocity.y-=1
	if Input.is_action_pressed("ui_down"):
		velocity.y+=1
		
#	对速度进行归一化，避免过快的斜向运动。
	if velocity.length() > 0:
		velocity = velocity.normalized() * speed
		$AnimatedSprite2D.play()
	else:
		$AnimatedSprite2D.stop()
		
	position += velocity * delta
	position = position.clamp(Vector2.ZERO, screen_size)
#	clamp() 来防止它离开屏幕。 clamp 一个值意味着将其限制在给定范围内
	
	if velocity.x !=0:
		$AnimatedSprite2D.animation='walk'
#		flip_v是垂直翻转；flip_h是水平翻转
		$AnimatedSprite2D.flip_v=false
		$AnimatedSprite2D.flip_h=velocity.x<0 # 向左移动时，水平翻转
		
	if velocity.y !=0:
		$AnimatedSprite2D.animation='up'
		$AnimatedSprite2D.flip_v=velocity.y>0

func start(pos):
	position = pos
	show()
	$CollisionShape2D.disabled = false

#碰撞到敌人闪烁，同时解除碰撞检测一段时间
func _on_body_entered(body: Node2D) -> void:
	hide() # Player disappears after being hit.
	hit.emit()
	# 使用 set_deferred() 告诉 Godot 等待可以安全地禁用形状时再这样做。
	$CollisionShape2D.set_deferred("disabled", true)
